package bean.produit;

import java.io.Serializable;
import java.sql.Date;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.TreeSet;

public class Produit implements Serializable{

	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;
	private int id;
	private int idService;
	private String codeProduit;
	private String nomProduit;
	private String descriptionPoduit;
	private boolean validiteProduit;
	private int categorieProduit;
	private Date debutVente;
	private Date finVente;
	private ArrayList<Declinaison> listDeclinaison = new ArrayList<Declinaison>();
	private int seuilProduit;
	private int stockSommeDeclinaison;
	private String codeFournisseur;
	private double prixMin;
	private TreeSet<Taille> tailles;
	private TreeSet<Couleur> couleurs;
	private int estInterne;
	private int estLivrable;
	private Tarif leTarif;
	

	private int PrixMinAPayger=1;
	
	
	public int getPrixMinAPayger() {
		return PrixMinAPayger;
	}


	public int getIdService() {
		return idService;
	}
	
	public void setIdService(int idService) {
		this.idService = idService;
	}
	
	public void setId(int id) {
		this.id = id;
	}

	public int getEstInterne() {
		return estInterne;
	}

	public void setEstInterne(int estInterne) {
		this.estInterne = estInterne;
	}

	
	
	public TreeSet<Taille> getTailles() {
		return tailles;
	}

	public void setTailles(TreeSet<Taille> tailles) {
		this.tailles = tailles;
	}

	public TreeSet<Couleur> getCouleurs() {
		return couleurs;
	}

	public void setCouleurs(TreeSet<Couleur> couleurs) {
		this.couleurs = couleurs;
	}

	public double getPrixMin() {
		return prixMin;
	}

	public void setPrixMin(double prixMin) {
		this.prixMin = prixMin;
	}

	public String getCodeFournisseur() {
		return codeFournisseur;
	}

	public void setCodeFournisseur(String codeFournisseur) {
		this.codeFournisseur = codeFournisseur;
	}

	public int getStockSommeDeclinaison() {
		return stockSommeDeclinaison;
	}

	public void setStockSommeDeclinaison(int stockSommeDeclinaison) {
		this.stockSommeDeclinaison = stockSommeDeclinaison;
	}

	public int getSeuilProduit() {
		return seuilProduit;
	}

	public void setSeuilProduit(int seuilProduit) {
		this.seuilProduit = seuilProduit;
	}

	//liste des images du produit
	private ArrayList<String> listImage = new ArrayList<String>();

	public Produit(){}
	
	public Produit(int i, String codep, String np, String dp, boolean vp, int cp, Date dv, Date fv,int interne, int estLivrable, Tarif leTarif, int id_service){
		this.id = i;
		this.codeProduit = codep;
		this.nomProduit = np;
		this.descriptionPoduit = dp;
		this.validiteProduit = vp;
		this.categorieProduit = cp;
		this.debutVente = dv;
		this.finVente = fv;
		this.estInterne = interne;
		this.estLivrable = estLivrable;
		this.leTarif = leTarif;
		this.idService = id_service;
	}

	public int getId() {
		return id;
	}

	public String getCodeProduit() {
		return codeProduit;
	}
	
	public String getNomProduit() {
		return nomProduit;
	}


	public String getDescriptionProduit() {
		return descriptionPoduit;
	}

	public boolean isValiditeProduit() {
		return validiteProduit;
	}

	public Date getDebutVente() {
		return debutVente;
	}

	public Date getFinVente() {
		return finVente;
	}

	public int getCategorieProduit() {
		return categorieProduit;
	}
	public boolean getValiditeProduit() {
		return validiteProduit;
	}
	
	public void setNom(String nom) {
		this.nomProduit=nom;
	}
	public void setCode(String code) {
		this.codeProduit=code;
	}
	public void setDescription(String description) {
		this.descriptionPoduit=description;
	}
	public void setCategorie(int categorie) {
		this.categorieProduit=categorie;
	}
	public void setValidite(boolean validite) {
		this.validiteProduit=validite;
	}
	public void setDebutVente(Date debut) {
		this.debutVente=debut;
	}
	public void setFinVente(Date fin) {
		this.finVente=fin;
	}
	
	public void modificationProduit(int id, String nom, String description, boolean validite, int categorie, Date debut, Date fin )
	{
		this.setNom(nom);
		this.setDescription(description);
		this.setValidite(validite);
		this.setCategorie(categorie);
		this.setDebutVente(debut);
		this.setFinVente(fin);
		
	}

	public ArrayList<Declinaison> getListDeclinaison() {
		return listDeclinaison;
	}

	public void setListDeclinaison(ArrayList<Declinaison> listDeclinaison) {
		this.listDeclinaison = listDeclinaison;
	}
	
	public ArrayList<String> getListImage() {
		return listImage;
	}

	public void setListImage(ArrayList<String> listImage) {
		this.listImage = listImage;
	}
	
	public int getEstLivrable() {
		return estLivrable;
	}

	public void setEstLivrable(int estLivrable) {
		this.estLivrable = estLivrable;
	}

	public Tarif getLeTarif() {
		return leTarif;
	}

	public void setLeTarif(Tarif leTarif) {
		this.leTarif = leTarif;
	}

	public ArrayList<Declinaison> getDeclinaisons(Taille t){
		ArrayList<Declinaison> dec = new ArrayList<Declinaison>();
		Declinaison d;
		
		Iterator<Declinaison> i = this.getListDeclinaison().iterator();
		while ( i.hasNext() ){
			d = i.next();
			if ( d.getTaille().getId() == t.getId() )				
				dec.add(d);
		}
		
		return dec;
	}
	
	public Declinaison getDeclinaison(Taille t, Couleur c) {
		Declinaison declinaisonRetour;
		
		Iterator<Declinaison> i = this.getListDeclinaison().iterator();
		while ( i.hasNext() ) {
			declinaisonRetour = i.next();
			if (((declinaisonRetour.getTaille() == null && t == null) || (declinaisonRetour.getTaille() != null && t != null && declinaisonRetour.getTaille().getId() == t.getId()))
					&& ((declinaisonRetour.getCouleur() == null && c == null) || (declinaisonRetour.getCouleur() != null && c != null && declinaisonRetour.getCouleur().getId() == c.getId())))				
				return declinaisonRetour;
		}

		return null;
	}
	
	public int getStock(){
		int stock = 0;
		Iterator<Declinaison> i = this.getListDeclinaison().iterator();
		while ( i.hasNext() )
			stock += i.next().getStock();
		
		return stock;
	}

}
